package webservice;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import orm.Ciudad;

import SOAPVO.CiudadSOAPVO;
import SOAPVO.PersonaSOAPVO;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class CiudadSOA {
 
	public static String mostrarCiudades(){
		String json = null;
				orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
//				Collection<orm.Persona> ormPersonas = Arrays.asList(lDAOFactory.getPersonaDAO().listPersonaByQuery(null, null));
				Collection<CiudadSOAPVO> colecionCiudadSOAPVO= new ArrayList<CiudadSOAPVO>();

				orm.Ciudad[] ormCiudades = lDAOFactory.getCiudadDAO().listCiudadByQuery(null, null);
				int length = ormCiudades.length;
				for (int i = 0; i < length; i++) {
					System.out.println(ormCiudades[i].getCiudad_descripcion());
					CiudadSOAPVO objeto = CiudadSOAPVO.crearCiudadSOAPVO(ormCiudades[i]);
					colecionCiudadSOAPVO.add(objeto);
				}
				Gson gson = new Gson();
				json = gson.toJson(colecionCiudadSOAPVO); 
		return json;	
	}
	
	public static String buscarCiudad(String nombreCiudad){
		
		String json = null;
		orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
//		Collection<orm.Persona> ormPersonas = Arrays.asList(lDAOFactory.getPersonaDAO().listPersonaByQuery(null, null));
		Collection<CiudadSOAPVO> colecionCiudadSOAPVO= new ArrayList<CiudadSOAPVO>();

		orm.Ciudad[] ormCiudades = lDAOFactory.getCiudadDAO().listCiudadByQuery("Ciudad.ciudad_descripcion ='"+nombreCiudad + "'", null);
		int length = ormCiudades.length;
		for (int i = 0; i < length; i++) {
			System.out.println(ormCiudades[i].getCiudad_descripcion());
			CiudadSOAPVO objeto = CiudadSOAPVO.crearCiudadSOAPVO(ormCiudades[i]);
			colecionCiudadSOAPVO.add(objeto);

		}
		Gson gson = new Gson();
		json = gson.toJson(colecionCiudadSOAPVO); 
		return json;
	}
	
	public static String ingresarCiudad(String nombreCiudad) throws PersistentException{
		
		String json = null;
		orm.DAOFactory DAOFactory = orm.DAOFactory.getDAOFactory();
//		Collection<orm.Persona> ormPersonas = Arrays.asList(lDAOFactory.getPersonaDAO().listPersonaByQuery(null, null));
		Collection<CiudadSOAPVO> colecionCiudadSOAPVO= new ArrayList<CiudadSOAPVO>();
		
		PersistentTransaction t = orm.VOSOAPproyectodesarrolloPersistentManager.instance().getSession().beginTransaction();
		try{
			
			orm.dao.CiudadDAO ormCiudadDAO = DAOFactory.getCiudadDAO();
			orm.Ciudad ormCiudad = ormCiudadDAO.createCiudad();
			ormCiudad.setCiudad_descripcion(nombreCiudad);
			// TODO Initialize the properties of the persistent object here, the following properties must be initialized before saving : partida, int_puntaje, int_fondo, varchar_password, varchar_username
			ormCiudadDAO.save(ormCiudad);
			t.commit();
		}
		catch(Exception e){
			t.rollback();
		}
		
		orm.Ciudad[] ormCiudades = DAOFactory.getCiudadDAO().listCiudadByQuery("Ciudad.ciudad_descripcion ='"+nombreCiudad + "'", null);
		int length = ormCiudades.length;
		for (int i = 0; i < length; i++) {
			System.out.println(ormCiudades[i].getCiudad_descripcion());
			CiudadSOAPVO objeto = CiudadSOAPVO.crearCiudadSOAPVO(ormCiudades[i]);
			colecionCiudadSOAPVO.add(objeto);
		}
		
		Gson gson = new Gson();
		json = gson.toJson(colecionCiudadSOAPVO); 
		return json;
	}
	
	public static int ingresarCiudadJSON(String json) throws PersistentException{
		
		Gson gson = new Gson();
		Type CiudadSOAPVOType = new TypeToken<CiudadSOAPVO>() {}.getType();
		CiudadSOAPVO ciudad = gson.fromJson(json, CiudadSOAPVOType);
		
		orm.DAOFactory DAOFactory = orm.DAOFactory.getDAOFactory();
		
		PersistentTransaction t = orm.VOSOAPproyectodesarrolloPersistentManager.instance().getSession().beginTransaction();
		
		try{				
			orm.dao.CiudadDAO ormCiudadDAO = DAOFactory.getCiudadDAO();
			orm.Ciudad ormCiudad = ormCiudadDAO.createCiudad();
			
			ormCiudad.setCiudad_descripcion(ciudad.getDescripcionCiudad());
					
			ormCiudadDAO.save(ormCiudad);	
			t.commit();
			return 1;
		}
		catch(Exception e){
			t.rollback();
			return 0;
		}
	}	
	
	public static void main(String[] args) {
		try {
			System.out.println(ingresarCiudad("Valdivia"));
		} catch (PersistentException e) {
			System.out.println("Error al ingresar Ciudad: \n");
			e.printStackTrace();
		}
	}
}
